《Android Framework 之路》多线程

多线程编程

JAVA多线程方式

  1. 继承Thread线程,实现run方法
  2. 实现Runnable接口 JAVA单继承性,当我们想将一个已经继承了其他类的子类放到Thread中时,单继承的局限就体现出来了
    但是可以实现多个接口,所以第二种方法相对于第一种来说灵活许多
    其次,通过
    new Thread(Runnable runnable).start()
    启动线程的方式,若变量在runnable中定义,多个线程可以共用,因为来自同一个对象
    比较适合多个相同程序代码的线程去处理同一资源的情况

Android多线程方式

主要集中在UI线程和其他线程的交互问题上

  1. Thread,Handler,Message
  2. AsyncTask
  3. Runnable 第一种方式,new Thread()然后通过Handler sendMessage,由Handler的handleMessage方法实现对应的处理,完成与UI进程的交互
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
private Handler mHandler =  new Handler(){
public void handleMessage(Message msg) {
/*do sth through msg */
}
}

public BadThread extends Thread {
private final static String TAG = this.getClass().getName();

public void run() {
/*coding*/
}
};

new BadThread().start();

第二种方式,异步线程的方式,doInBackground()中执行任务,onPreExecute()准备工作,onPostExecute()任务结束后调用,onProgressUpdate与publishProgress配合使用,实现和UI线程的交互

1
2
3
4
5
6
7
8
9
AsyncTask mLoadingTask = new AsyncTask(){
protected Object doInBackground(Object[] objects) {
}
protected void onProgressUpdate(Object[] values) {
}
......
}

mLoadingTask.execute();

第三种方式,Runnable对象,通过Handler直接Post等方法启动线程,实现与UI线程的交互

1
2
3
4
5
6
7
private Runnable mRunnable = new Runnable(){
public void run() {
/*do sth*/
}
}

mHandler.post(mRunnable);
Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×